function objectFactory() { // 实现new功能
    // Person 普通函数运行一下  apply (p)
    let obj = {}; // 实例和构造函数之间没有血缘关系 即原型式面向对象
    // var Constructor = arguments[0]; // arguments 所以的参数集合
    // arguments 伪数组  把 shift 方法借给 arguments用
    var Constructor = [].shift.call(arguments);
    // console.log(Constructor, arguments,'------')
    obj.__proto__ = Constructor.prototype;
    var ret = Constructor.apply(obj, arguments) // 将this指向 obj
    // return ret? ret : obj // 实例
    return typeof ret === 'object'? ret || obj : obj;
}

function Person(name, age) {
    this.name = name;
    this.age = age;
    return null;
    // return {
    //     name,
    //     age,
    //     bb: '11'
    // }
}

// const P = new person('张三', 18)
// console.log(P.name)
let p = objectFactory(Person,'张三',18); // 引用式
console.log(p)